package com.nnnu.wsnackshop.service;

import com.nnnu.wsnackshop.pojo.dto.AdminUserPageDTO;
import com.nnnu.wsnackshop.pojo.dto.AdminUserSaveDTO;
import com.nnnu.wsnackshop.pojo.dto.UserRegisterDTO;
import com.nnnu.wsnackshop.pojo.dto.UserUpdateDTO;
import com.nnnu.wsnackshop.pojo.dto.PasswordChangeDTO;
import com.nnnu.wsnackshop.pojo.entity.Users;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nnnu.wsnackshop.pojo.vo.AdminUserVO;
import com.nnnu.wsnackshop.result.PageResult;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author zk
 * @since 2025-05-14
 */
public interface IUsersService extends IService<Users> {

    Set<String> getRoleStrings(String username);

    Set<String> getPermissionStrings(String username);

    PageResult<AdminUserVO> pageUsers(AdminUserPageDTO dto);

    AdminUserVO getUserDetail(Long id);

    void createUser(AdminUserSaveDTO dto);

    void updateUser(Long id, AdminUserSaveDTO dto);

    /**
     * 批量删除用户
     * 
     * @param ids 用户ID列表
     */
    void deleteUsers(List<Long> ids);

    /**
     * 用户注册
     * 
     * @param registerDTO 注册信息
     * @return 注册成功的用户信息
     */
    Users register(UserRegisterDTO registerDTO);

    /**
     * 获取当前登录用户信息
     * 
     * @return 用户信息
     */
    Users getCurrentUser();

    /**
     * 更新用户信息
     * 
     * @param updateDTO 更新信息
     * @return 更新后的用户信息
     */
    Users updateProfile(UserUpdateDTO updateDTO);

    /**
     * 修改密码
     * 
     * @param changeDTO 修改密码信息
     */
    void changePassword(PasswordChangeDTO changeDTO);

    /**
     * 获取用户积分信息
     * 
     * @param userId 用户ID
     * @return 积分信息
     */
    Map<String, Object> getUserPoints(Integer userId);
}
